package kn.tool.csv;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.csv.*;
import cn.hutool.core.util.CharsetUtil;
import kn.tool.core.ObjectUtil;
import java.io.File;
import java.nio.charset.Charset;
import java.util.Collection;
import java.util.List;

/**
 * @author: dengkunnan
 * @date: 2020-07-11 23:48
 * @description: Csv文件操作工具类，Csv文件读取/写入操作
 **/
public class CsvHandlerUtil {


    /**
     * 生成csv文件
     *
     * @param fileName csv文件名称
     * @param items    待导出文件内容
     * @return csv文件对象
     */
    public static File exportCsv(String fileName, Collection<String[]> items) {
        return exportCsv(fileName, items, CharsetUtil.CHARSET_GBK);
    }

    /**
     * 生成csv文件
     *
     * @param fileName csv文件名称
     * @param items    待导出文件内容
     * @param charset  字符类型
     * @return csv文件对象
     * Charset.forName("GBK")
     * Charset.forName("US-ASCII")
     * Charset.forName("UTF-8")
     * ......
     */
    public static File exportCsv(String fileName, Collection<String[]> items, Charset charset) {
        File file = new File(fileName);
        CsvWriter writer = cn.hutool.core.text.csv.CsvUtil.getWriter(file, charset);
        writer.write(items);
        writer.close();
        return file;
    }


    /**
     * 从文件中读取CSV数据
     *
     * @param filePath csv文件名称
     * @return csv文件CsvData对象
     */
    public static List<CsvRow> readerCsv(String filePath) {
        File csvFile = FileUtil.file(filePath);
        return readerCsv(csvFile);
    }

    /**
     * 从文件中读取CSV数据
     *
     * @param csvFile csvFile
     * @return csv文件CsvData对象
     */
    public static List<CsvRow> readerCsv(File csvFile) {
        CsvReader reader = CsvUtil.getReader();
        CsvData data = reader.read(csvFile);
        if (ObjectUtil.isNull(data)) {
            return null;
        }
        return data.getRows();
    }


}
